home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / lib / perl / 5.10.1 / DynaLoader.pm < prev    next >
Encoding:
Perl POD Document  |  2012-12-11  |  7.2 KB  |  226 lines

  1. # Generated from DynaLoader_pm.PL
  2.  
  3. package DynaLoader;
  4.  
  5. #   And Gandalf said: 'Many folk like to know beforehand what is to
  6. #   be set on the table; but those who have laboured to prepare the
  7. #   feast like to keep their secret; for wonder makes the words of
  8. #   praise louder.'
  9.  
  10. #   (Quote from Tolkien suggested by Anno Siegel.)
  11. #
  12. # See pod text at end of file for documentation.
  13. # See also ext/DynaLoader/README in source tree for other information.
  14. #
  15. # Tim.Bunce@ig.co.uk, August 1994
  16.  
  17. BEGIN {
  18.     $VERSION = '1.10';
  19. }
  20.  
  21. require AutoLoader;
  22. *AUTOLOAD = \&AutoLoader::AUTOLOAD;
  23.  
  24. use Config;
  25.  
  26. # enable debug/trace messages from DynaLoader perl code
  27. $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
  28.  
  29. #
  30. # Flags to alter dl_load_file behaviour.  Assigned bits:
  31. #   0x01  make symbols available for linking later dl_load_file's.
  32. #         (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
  33. #         (ignored under VMS; effect is built-in to image linking)
  34. #
  35. # This is called as a class method $module->dl_load_flags.  The
  36. # definition here will be inherited and result on "default" loading
  37. # behaviour unless a sub-class of DynaLoader defines its own version.
  38. #
  39.  
  40. sub dl_load_flags { 0x00 }
  41.  
  42. ($dl_dlext, $dl_so, $dlsrc) = @Config::Config{qw(dlext so dlsrc)};
  43.  
  44. $do_expand = 0;
  45.  
  46. @dl_require_symbols = ();       # names of symbols we need
  47. @dl_resolve_using   = ();       # names of files to link with
  48. @dl_library_path    = ();       # path to look for files
  49.  
  50. #XSLoader.pm may have added elements before we were required
  51. #@dl_shared_objects  = ();       # shared objects for symbols we have 
  52. #@dl_librefs         = ();       # things we have loaded
  53. #@dl_modules         = ();       # Modules we have loaded
  54.  
  55. # This is a fix to support DLD's unfortunate desire to relink -lc
  56. @dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs";
  57.  
  58. # Initialise @dl_library_path with the 'standard' library path
  59. # for this platform as determined by Configure.
  60.  
  61. push(@dl_library_path, split(' ', $Config::Config{libpth}));
  62.  
  63. my $ldlibpthname         = $Config::Config{ldlibpthname};
  64. my $ldlibpthname_defined = defined $Config::Config{ldlibpthname};
  65. my $pthsep               = $Config::Config{path_sep};
  66.  
  67. # Add to @dl_library_path any extra directories we can gather from environment
  68. # during runtime.
  69.  
  70. if ($ldlibpthname_defined &&
  71.     exists $ENV{$ldlibpthname}) {
  72.     push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname}));
  73. }
  74.  
  75. # E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH.
  76.  
  77. if ($ldlibpthname_defined &&
  78.     $ldlibpthname ne 'LD_LIBRARY_PATH' &&
  79.     exists $ENV{LD_LIBRARY_PATH}) {
  80.     push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH}));
  81. }
  82.  
  83. # No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
  84. # NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
  85. boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
  86.                                 !defined(&dl_error);
  87.  
  88. if ($dl_debug) {
  89.     print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n";
  90.     print STDERR "DynaLoader not linked into this perl\n"
  91.         unless defined(&boot_DynaLoader);
  92. }
  93.  
  94. 1; # End of main code
  95.  
  96. sub croak   { require Carp; Carp::croak(@_)   }
  97.  
  98. sub bootstrap_inherit {
  99.     my $module = $_[0];
  100.     local *isa = *{"$module\::ISA"};
  101.     local @isa = (@isa, 'DynaLoader');
  102.     # Cannot goto due to delocalization.  Will report errors on a wrong line?
  103.     bootstrap(@_);
  104. }
  105.  
  106. # The bootstrap function cannot be autoloaded (without complications)
  107. # so we define it here:
  108.  
  109. sub bootstrap {
  110.     # use local vars to enable $module.bs script to edit values
  111.     local(@args) = @_;
  112.     local($module) = $args[0];
  113.     local(@dirs, $file);
  114.  
  115.     unless ($module) {
  116.     require Carp;
  117.     Carp::confess("Usage: DynaLoader::bootstrap(module)");
  118.     }
  119.  
  120.     # A common error on platforms which don't support dynamic loading.
  121.     # Since it's fatal and potentially confusing we give a detailed message.
  122.     croak("Can't load module $module, dynamic loading not available in this perl.\n".
  123.     "  (You may need to build a new perl executable which either supports\n".
  124.     "  dynamic loading or has the $module module statically linked into it.)\n")
  125.     unless defined(&dl_load_file);
  126.  
  127.     
  128.     my @modparts = split(/::/,$module);
  129.     my $modfname = $modparts[-1];
  130.  
  131.     # Some systems have restrictions on files names for DLL's etc.
  132.     # mod2fname returns appropriate file base name (typically truncated)
  133.     # It may also edit @modparts if required.
  134.     $modfname = &mod2fname(\@modparts) if defined &mod2fname;
  135.  
  136.     
  137.  
  138.     my $modpname = join('/',@modparts);
  139.  
  140.     print STDERR "DynaLoader::bootstrap for $module ",
  141.                "(auto/$modpname/$modfname.$dl_dlext)\n"
  142.     if $dl_debug;
  143.  
  144.     foreach (@INC) {
  145.     
  146.     
  147.         my $dir = "$_/auto/$modpname";
  148.     
  149.     
  150.     next unless -d $dir; # skip over uninteresting directories
  151.     
  152.     # check for common cases to avoid autoload of dl_findfile
  153.     my $try =  "$dir/$modfname.$dl_dlext";
  154.     last if $file = ($do_expand) ? dl_expandspec($try) : ((-f $try) && $try);
  155.     
  156.     # no luck here, save dir for possible later dl_findfile search
  157.     push @dirs, $dir;
  158.     }
  159.     # last resort, let dl_findfile have a go in all known locations
  160.     $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file;
  161.  
  162.     croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
  163.     unless $file;    # wording similar to error from 'require'
  164.  
  165.     
  166.     my $bootname = "boot_$module";
  167.     $bootname =~ s/\W/_/g;
  168.     @dl_require_symbols = ($bootname);
  169.  
  170.     # Execute optional '.bootstrap' perl script for this module.
  171.     # The .bs file can be used to configure @dl_resolve_using etc to
  172.     # match the needs of the individual module on this architecture.
  173.     my $bs = $file;
  174.     $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
  175.     if (-s $bs) { # only read file if it's not empty
  176.         print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
  177.         eval { do $bs; };
  178.         warn "$bs: $@\n" if $@;
  179.     }
  180.  
  181.     my $boot_symbol_ref;
  182.  
  183.     
  184.  
  185.     # Many dynamic extension loading problems will appear to come from
  186.     # this section of code: XYZ failed at line 123 of DynaLoader.pm.
  187.     # Often these errors are actually occurring in the initialisation
  188.     # C code of the extension XS file. Perl reports the error as being
  189.     # in this perl code simply because this was the last perl code
  190.     # it executed.
  191.  
  192.     my $libref = dl_load_file($file, $module->dl_load_flags) or
  193.     croak("Can't load '$file' for module $module: ".dl_error());
  194.  
  195.     push(@dl_librefs,$libref);  # record loaded object
  196.  
  197.     my @unresolved = dl_undef_symbols();
  198.     if (@unresolved) {
  199.     require Carp;
  200.     Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
  201.     }
  202.  
  203.     $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
  204.          croak("Can't find '$bootname' symbol in $file\n");
  205.  
  206.     push(@dl_modules, $module); # record loaded module
  207.  
  208.   boot:
  209.     my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
  210.  
  211.     # See comment block above
  212.  
  213.     push(@dl_shared_objects, $file); # record files loaded
  214.  
  215.     &$xs(@args);
  216. }
  217.  
  218. #sub _check_file {   # private utility to handle dl_expandspec vs -f tests
  219. #    my($file) = @_;
  220. #    return $file if (!$do_expand && -f $file); # the common case
  221. #    return $file if ( $do_expand && ($file=dl_expandspec($file)));
  222. #    return undef;
  223. #}
  224.  
  225. # Let autosplit and the autoloader deal with these functions:
  226.